type User = {
  readonly id: string;
  readonly name: string;
  readonly imageUrl: string;
  role?: {
    id: string;
    hasAllPermissions: boolean;
  };
};

type Session = {
  status: "authenticated" | "unauthenticated";
  // !用户也是可选的
  user?: User;
};

const session: Session = {
  status: "authenticated",
  user: {
    id: "1",
    name: "John Doe",
    imageUrl: "https://",
  },
};

// optional chaining (?.) nullish coalescing operator (??), 如果左边没有定义或者为空，就取又边
// console.log(session.user?.role?.hasAllPermissions ?? false);

// "!."非空断言操作符，告诉TS不会为空，就是表示一直有值
const hasPermission = session.user!.role!.hasAllPermissions;
// session.user!.id = "" // 这里会提示id是只读的，不能修改
// 当你对属性设置只读就用readonly

// 如果是想要一整个对象不可以修改，可以使用
// Object.freeze(session.user);
console.log(hasPermission);
